EC2 Instance Connect エンドポイント登場!踏み台サーバー不要でパブリックIPのないEC2にSSH・RDPできるようになりました

EC2 Instance Connect エンドポイント登場!踏み台サーバー不要でパブリックIPのないEC2にSSH・RDPできるようになりました

EC2 Instance Connectは死んでいなかった
Clock Icon2023.06.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

EC2インスタンスにシェル・RDPアクセスしたい場合、オンプレ発想で踏み台サーバーを用意する以外にも、AWS Systems Manager Session Manager(以下SSM Session Manager)というマネージド・サービスでアクセスすることもできます。

このSSM Session Managerによく似たサービスとして、EC2 Instance Connect(以下 EIC)というサービスがあり、エフェメラルな公開鍵を活用してSSH可能です。

VPCエンドポイントを活用して、どのIPアドレスからもパブリックIPのないインスタンスに対して接続できるSSM Session Managerと異なり、従来のEICは接続性が必要でした。

AWS re:inforce 2023で発表されたEC2 Instance Connect Endpointにより、パブリックIPアドレスのないインスタンスに対しても、クライアントのIPアドレスからの通信を許可することなくSSH/RDPできるようになりました。

設定方法

EC2 Instance Connectでプライベートアクセスを実現するには、以下の作業をします。

  1. EICエンドポイント用セキュリティグループを作成
  2. 接続先EC2インスタンス用セキュリティグループを作成
  3. EICエンドポイントを作成
  4. EICエンドポイントからEC2インスタンスへの通信を許可するようセキュリティグループを調整

例)

  • EICエンドポイント用セキュリティグループ
    • インバウンド
      • ブランク
    • アウトバウンド
      • EC2インスタンス用セキュリティグループへのSSHを許可
  • EC2インスタンス用セキュリティグループ
    • インバウンド
      • EICエンドポイント用セキュリティグループからのSSHを許可
    • アウトバウンド
      • EICエンドポイント用セキュリティグループへの任意のTCPを許可

引用元

詳細はドキュメントを参照ください。

"Preserve Client IP"のチェックを有効にすると、クライアントのIPアドレスを保持する用に設定することもできます。

この場合、EC2のセキュリティグループのインバウンドルールにおいて、クライアントIPからの通信を許可するよう調整して下さい。

EICエンドポイントはVPC→Endpoints→EC2 Instance Connect Endpointから作成します。 作成時には、以下を指定します。

  • VPC
  • サブネット
  • セキュリティグループ

デフォルトクオータでは、各VPCにはEICエンドポイントを一つしか作れないので、ご注意ください。

SSM Session Managerと異なり、EC2インスタンスプロファイルで専用のアクションを許可する必要はありません。

接続方法

  1. AWSマネージドコンソールでEC2インスタンスを選択
  2. Connect メニューを選択
  3. EC2 Instance Connectタブから以下を操作
    1. Connect using EC2 Instance Connect Endpoint
    2. EC2 Instance Connect Endpoint を選択
    3. Connect ボタン

接続がうまく行かない場合、Reachability Analyzerを使って、EICエンドポイントのENIからEC2インスタンスのENIへの接続性を確認しましょう。

Ubuntu 22.04 へConnect時の /var/log/auth.log を確認すると、以下の様に出力されていました。

Jun 13 18:22:13 ip-172-31-82-17 ec2-instance-connect[1427]: Querying EC2 Instance Connect keys for matching fingerprint: SHA256:ZcD+...
Jun 13 18:22:13 ip-172-31-82-17 ec2-instance-connect[1459]: Providing ssh key from EC2 Instance Connect with fingerprint: SHA256:ZcD+..., request-id: ac63faf4-3dfe-457d-aa32-ac8954d4286d, for IAM principal: arn:aws:sts::123:assumed-role/XXX/YYY
Jun 13 18:22:13 ip-172-31-82-17 ec2-instance-connect[1598]: Querying EC2 Instance Connect keys for matching fingerprint: SHA256:ZcD+...
Jun 13 18:22:13 ip-172-31-82-17 ec2-instance-connect[1630]: Providing ssh key from EC2 Instance Connect with fingerprint: SHA256:ZcD+..., request-id: ac63faf4-3dfe-457d-aa32-ac8954d4286d, for IAM principal: arn:aws:sts::123:assumed-role/XXX/YYY
Jun 13 18:22:13 ip-172-31-82-17 sshd[1296]: Accepted publickey for ubuntu from 172.31.61.113 port 5382 ssh2: ED25519 SHA256:ZcD+...
Jun 13 18:22:13 ip-172-31-82-17 sshd[1296]: pam_unix(sshd:session): session opened for user ubuntu(uid=1000) by (uid=0)
Jun 13 18:22:13 ip-172-31-82-17 systemd-logind[429]: New session 4 of user ubuntu.

ip-172-31-82-17 のIPは接続先EC2インスタンスのもの、Accepted publickey for ubuntu from 172.31.61.113のIPはEICエンドポイント(のENI)のものです。

コマンドライン経由でも接続可能です。

$ ssh -i my-key-pair.pem ec2-user@i-0123456789example \
    -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example'

このコマンドからわかるように、内部的には ec2-instance-connect::open-tunnel API を利用しており、既存の ec2-instance-connect の延長上で実装されていることがわかります。

また、API名からわかるように、裏ではSSHトンネルをほっていると思われます。

RDPの場合は、RDPのポートを転送してアクセスします。

$ aws ec2-instance-connect open-tunnel \
    --instance-id i-0123456789example \
    --remote-port 3389 \
    --local-port any-port

同様の手順で、VPC内のRDP等にも接続できます。

AWS CLIが対応後に動作確認したいと思います。

SSM Session ManagerとEICエンドポイントの違い

最後にプライベート領域に接続する場合の SSM Session ManagerとEICエンドポイントの違いについて述べます。

利用者観点では、SSM Session Manager(特にSSH over SSM)とEICエンドポイント方式の違いは微妙です。

踏み台リソース

SSM Session ManagerはEC2ないしはFargate等のSSMエージェントがインストールされたリソースが必要です。

一方で、EICの場合、VPC内にエンドポイントを作成すれば、そこから通信可能なリソースにたいして、EC2へSSHしたりポートフォワードしてRDPしたり、RDBにアクセスしたりできます。 踏み台サーバーは不要です。

https://dev.classmethod.jp/articles/how-to-connect-rds-instance-via-eic-endpoint/

技術面

シェル(SSH)アクセスするという点ではこの2つは似通っていますが、実現方法は大きく異なります。

SSM Session ManagerはSSMがサービスのコアにあり、接続元も接続先EC2インスタンスもSSMのIAMポリシーでアクセスコントロールします。 EICはEICエンドポイントと接続先EC2インスタンスのセキュリティグループでアクセスコントロールします。

技術的な観点から選定する際には、IAMとネットワークのどちらのほうが要件を実現しやすいのか評価するといいと思います。

利用費

利用費も大きく異なります。

EC2 Instance Connect エンドポイントは利用費が発生しません。 一方で、SSM Session Managerは少なくとも3つのVPCエンドポイントが必要で、利用費がかさみます。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.